/**
 * 全局请求及响应拦截的配置文件
 * 会用即可
 */
import {extend} from 'umi-request';
// import {message} from "antd";
// import {history} from "@@/core/history";
// import {stringify} from "querystring";

/**
 * 配置request请求时的默认参数
 */
const request = extend({    //通过extend在原有的request基础上添加或覆盖上新的拦截处理
// !!!注意，添加了该设置后，实现跨域时则需要显式指定具体的Origin，而不能使用通配符'*'，同时需要显示设置allowCredentials为true!!!
  credentials: 'include', // 默认请求是否带上cookie
  //请求云服务器上的后端项目地址
  prefix: process.env.NODE_ENV === 'production' ? 'http://175.178.59.14:8080' : undefined
  // prefix: process.env.NODE_ENV === 'production' ? 'http://user-center.backend.com' : undefined
  // prefix: process.env.NODE_ENV === 'production' ? 'http://localhost:8080' : undefined
  // requestType: 'form',
});

/**
 * 所有请求的拦截器
 * 当有请求需要发送时先进行拦截，执行相关操作，随后发送
 */
// request.interceptors.request.use((url, options): any => {
//   console.log(`do request url = ${url}`)
//   return {
//     url,
//     options: {
//       ...options,
//       headers: {},
//     },
//   };
// });

/**
 * 所有响应拦截器
 * 当后端接口响应了对应结果时，对响应结果进行拦截，并执行相关操作
 * 如:取出后端响应的BaseResponse对象中的data数据
 * 则前端代码中的对应结果无需进行重新封装：
 *
 * 在api.ts中调用后端接口时，request实际return的就是BaseResponse中的data数据体
 * 如：
 * return request<API.CurrentUser>('/api/user/getCurrent', {   //'api/user/getCurrent'接口返回的是'API.BaseResponse<API.CurrentUser>'
 *
 *     method: 'GET',
 *     ...(options || {}),
 *   });
 */
request.interceptors.response.use(async (response, options): Promise<any> => {
  const res = await response.clone().json();

  //对响应结果为未登录的提示错误信息
  // if (res.code === 40100) {
  //   message.error('请先登录');
  //   history.replace({
  //     pathname: '/user/login',
  //     search: stringify({
  //       redirect: location.pathname,
  //     }),
  //   });
  //   return;
  // }
  return res;
});

export default request;
